
(virtual-font
  (pm (glue-below + (scale minus + 1 *)))
  (mp (or (hor-flip (ver-flip pm))
          (glue-above + (scale minus + 1 *))))
  (plus1 (join minus (align* vminus minus 0.5 0.5)))
  (plus2 (with m (min 1 (/ (* 1.4142 (height +)) (width (crop minus))))
           (magnify plus1 m m)))
  (times (pretend (align (crop (rotate plus2 0.7854)) + 0.5 0.5) plus2))
  (ltimes (bar-left   times (scale* vminus times 0 1)))
  (rtimes (bar-right  times (scale* vminus times 0 1)))
  (btimes (bar-bottom times (scale* minus  times 1 0)))
  (ttimes (bar-top    times (scale* minus  times 1 0)))
  (pplus (with sep (+ 0.0667 (frac-width))
           (join (0 0 +) (sep 0 +))))
  (ast (align* #2A + 0.5 0.5))
  (div (join (align minus + 0.5 0.5)
             (align . + 0.5 0.8)
             (align . + 0.5 0.2)))
  (dslash (pretend (align (crop (rotate minus  0.7854)) + 0.5 0.5) +))
  (bslash (pretend (align (crop (rotate minus -0.7854)) + 0.5 0.5) +))
  (minusd (magnify minus 1.4142 1))
  (dslash* (pretend (align (crop (rotate minusd  0.7854)) + 0.5 0.5) +))
  (bslash* (pretend (align (crop (rotate minusd -0.7854)) + 0.5 0.5) +))
  (angle (join (bar-bottom dslash* (scale* minus dslash* 1 0))
               (part (align* (scale* minus dslash* 1 0) dslash* 0.5 0)
                     0.5 * * *)))
  (shortmid vminus)
  (circ osmall)
  (bullet (flood-fill circ 0.5 0.5))
  (amalg (align* (ver-flip #220F) + * 0.5))
  (hvminus (part (align* vminus minus 1 *) * * * 0.5))
  (neg (align* (right-fit minus hvminus 0.1) minus * 0.5))
  (minuss (magnify minus 0.7071 1))
  (diamond* (join (align* (rotate minuss  0.7854) plus1 0 1)
                  (align* (rotate minuss -0.7854) plus1 1 1)
                  (align* (rotate minuss -0.7854) plus1 0 0)
                  (align* (rotate minuss  0.7854) plus1 1 0)))
  (diamond (align* diamond* + * 0.5))

  (times1 (with d (*  0.25 (width (crop times)))
            (intersect times (d d times))))
  (times2 (with d (* -0.25 (width (crop times)))
            (join times1 (d d times1))))
  (times3 (with d (* -0.5  (width (crop times)))
            (intersect times (d d times))))
  (times4 (with d (*  0.5  (width (crop times)))
            (intersect times (d d times))))
  (times5 (with d (* -0.25 (width (crop times)))
          (with e (*  0.25 (width (crop times)))
            (intersect times (d e times)))))
  (times6 (with d (*  0.25 (width (crop times)))
          (with e (* -0.25 (width (crop times)))
            (join times5 (d e times5)))))
  (times7 (with d (*  0.5  (width (crop times)))
          (with e (* -0.5  (width (crop times)))
            (intersect times (d e times)))))
  (times8 (with d (* -0.5  (width (crop times)))
          (with e (*  0.5  (width (crop times)))
            (intersect times (d e times)))))
  (leftthreetimes  (join times6 times3))
  (rightthreetimes (join times2 times7))
  (lefttimesthree  (join times2 times8))
  (righttimesthree (join times6 times4))

  (vee (with penw (frac-width)
         (pretend (align* (fscale* (rot-left (ver-flip less)) + 1 1 penw)
                          + 0.5 0.5) +)))
  (wedge (with penw (frac-width)
           (pretend (align* (fscale* (rot-right (ver-flip less)) + 1 1 penw)
                            + 0.5 0.5) +)))
  (prec (curly less))
  (succ (hor-flip (curly (hor-flip gtr))))
  (curlyvee
    (with penw (frac-width)
      (pretend (align* (fscale* (rot-left (ver-flip prec)) + 1 1 penw)
                       + 0.5 0.5) +)))
  (curlywedge
    (with penw (frac-width)
      (pretend (align* (fscale* (rot-right (ver-flip prec)) + 1 1 penw)
                       + 0.5 0.5) +)))
  (triangle (bar-bottom wedge (scale* minus wedge 1 0)))
  (vartriangle (bar-bottom wedge (scale* minus wedge 1 0)))
  (triangledown (bar-top vee (scale* minus wedge 1 0)))
  (triangleup (ver-flip triangledown))
  (blacktriangle (flood-fill triangle 0.5 0.5))
  (blacktriangledown (flood-fill triangledown 0.5 0.5))
  (blacktriangleup (ver-flip blacktriangledown))
  (veebar (stack-equal vee (hor-scale minus vee)))
  (barwedge (stack-equal (hor-scale minus wedge) wedge))
  (oval1
    (with penw (frac-width)
    (with w (width (crop +))
    (with h (* 0.8 (height (crop +)))
    (with a (/ h w)
    (with r (* 0.5 (- w penw))
      (deepen (circle r penw) a penw)))))))
  (shvminus (magnify (scale* (crop vminus) + * 1) * 0.625))
  (cap* (join (align* shvminus + 0 0)
              (align* shvminus + 1 0)
              (align* (part oval1 * * 0.475 *) + 0.5 1)))
  (cap (pretend (align* cap* + 0.5 0.5) +))
  (cup* (join (align* shvminus + 0 1)
              (align* shvminus + 1 1)
              (align* (part oval1 * * * 0.525) + 0.5 0)))
  (cup (pretend (align* cup* + 0.5 0.5) +))
  (uplus (join cup (align* (magnify + 0.6 0.6) cup 0.5 0.6666)))
  (sqcap* (join (align* (scale* vminus + * 1) + 0 0)
                (align* (scale* vminus + * 1) + 1 0)
                (align* (scale* minus + 1 *) + 0.5 1)))
  (sqcap (pretend (align* sqcap* + 0.5 0.5) +))
  (sqcup* (join (align* (scale* vminus + * 1) + 0 0)
                (align* (scale* vminus + * 1) + 1 0)
                (align* (scale* minus + 1 *) + 0.5 0)))
  (sqcup (pretend (align* sqcup* + 0.5 0.5) +))

  (oplus (join oempty (align* + oempty 0.5 0.5)))
  (ominus (join oempty (align* minus oempty 0.5 0.5)))
  (otimes (join oempty (align* dslash oempty 0.5 0.5)
                       (align* bslash oempty 0.5 0.5)))
  (oslash (join oempty (align* dslash oempty 0.5 0.5)))
  (odot (join oempty (align* . oempty 0.5 0.5)))
  (ocirc (join oempty (align* osmall oempty 0.5 0.5)))
  (varocircle (join oempty (align* osmall oempty 0.5 0.5)))
  (circledast (join oempty (align* ast oempty 0.5 0.5)))
  (obar (join oempty (align* vminus oempty 0.5 0.5)))
  (oequal (join oempty (align* (magnify = 0.7 0.7) oempty 0.5 0.5)))
  (osim (join oempty (align* (magnify ~ 0.9 0.9) oempty 0.5 0.5)))
  (oless (join oempty (align* (magnify less 0.7 0.7) oempty 0.5 0.5)))
  (ogtr (join oempty (align* (magnify gtr 0.7 0.7) oempty 0.5 0.5)))

  (hbarplus (with sz (+ (max (width (crop +)) (height (crop +)))
                        (width (crop vminus)))
              (with mx (/ sz (width (crop minus)))
                (magnify minus mx 1))))
  (vbarplus (with sz (+ (max (width (crop +)) (height (crop +)))
                        (frac-width))
              (with my (/ sz (height (crop vminus)))
                (magnify vminus 1 my))))
  (hvplus (join (align* hbarplus + 0.5 0.5)
                (align* vbarplus + 0.5 0.5)))
  (boxempty
    (with d (/ (frac-width) 2)
      (unindent (enlarge
        (pretend (join (align* hbarplus hvplus 0.5 0)
                       (align* hbarplus hvplus 0.5 1)
                       (align* vbarplus hvplus 0 0.5)
                       (align* vbarplus hvplus 1 0.5)) +)
        d d))))
  (box boxempty)
  (Box boxempty)
  (boxplus (join boxempty (align* + boxempty 0.5 0.5)))
  (boxminus (join boxempty (align* minus boxempty 0.5 0.5)))
  (boxtimes (join boxempty (align* dslash* boxempty 0.5 0.5)
                           (align* bslash* boxempty 0.5 0.5)))
  (boxslash (join boxempty (align* dslash* boxempty 0.5 0.5)))
  (boxdot (join boxempty (align* . boxempty 0.5 0.5)))
  (boxempty* (crop boxempty))
  (smallbox (join (align (part boxempty* * 0.5 * 0.5) boxempty* 0.5 0.5)
                  (align (part boxempty* 0.5 * 0.5 *) boxempty* 0.5 0.5)))
  (boxbox (join boxempty smallbox))
  (boxast (join boxempty (align* ast boxempty 0.5 0.5)))
  (boxbar (join boxempty (align* vminus boxempty 0.5 0.5)))
  (boxequal (join boxempty (align* (magnify = 0.7 0.7) boxempty 0.5 0.5)))
  (boxsim (join boxempty (align* (magnify ~ 0.9 0.9) boxempty 0.5 0.5)))
  (boxless (join boxempty (align* (magnify less 0.7 0.7) boxempty 0.5 0.5)))
  (boxgtr (join boxempty (align* (magnify gtr 0.7 0.7) boxempty 0.5 0.5)))
  (blacksquare (flood-fill boxempty 0.5 0.5))

  (suchthat \:)
  (barsuchthat |)
  (assign (glue (align \: = * 0.5) (0.2 0 =)))
  (plusassign (glue (align + = * 0.5) (0.2 0 =)))
  (minusassign (glue (align minus = * 0.5) (0.2 0 =)))
  (astassign (glue (align asterisk = * 0.5) (0.2 0 =)))
  (overassign (glue (align / = * 0.5) (0.2 0 =)))
  (backassign (hor-flip assign))

  (doteq (join (top-crop =) (0 0.15 (align* . = 0.5 0 0.5 1))))
  (dotplus (join (top-crop +) (0 0.1 (align* . + 0.5 0 0.5 1))))
  (dotminus (join (top-crop minus) (0 0.2 (align* . minus 0.5 0 0.5 1))))
  (dotamalg (join (top-crop amalg) (0 0.1 (align* . amalg 0.5 0 0.5 1))))
  (dottimes (join (top-crop times) (0 0.1 (align* . times 0.5 0 0.5 1))))
  (dotpm (join (top-crop pm) (0 0.1 (align* . pm 0.5 0 0.5 1))))
  (dotmp (join (top-crop mp) (0 0.1 (align* . mp 0.5 0 0.5 1))))
  (dotast (join (top-crop ast) (0 0.1 (align* . ast 0.5 0 0.5 1))))
  (dotoplus (join (top-crop oplus) (0 0.1 (align* . oplus 0.5 0 0.5 1))))
  (dototimes (join (top-crop otimes) (0 0.1 (align* . otimes 0.5 0 0.5 1))))

  (vbarE (align* (scale vminus (crop E) 0 1) (crop E) 0 0))
  (hbarE (with mag (/ (- (xpos (crop E) 1) (xpos (crop E) 0 0.5 +))
                      (width minus))
           (magnify minus mag 1)))
  (exists (join (align* hbarE vbarE * 0)
                (align* hbarE vbarE * 0.5)
                (align* hbarE vbarE * 1)
                (align* vbarE hbarE 1 *)))
  (exists1 (ver-crop exists))
  (exists2 (part exists1 * * * 0.375))
  (exists3 (part exists1 * * 0.625 *))
  (exists4 (part exists1 * * 0.225 0.375))
  (exists5 (with dy1 (* 0.125 (height exists1))
             (with dy2 (* 0.25 (height exists1))
               (join exists2 exists3 (0 dy1 exists4) (0 dy2 exists4)))))
  (Exists (with d (+ (sep-equal) (width vminus))
            (join exists (d 0 exists5))))
  (fA1 (align* (scale* minus preall 1 0) preall 0.5 *))
  (fA2 (with d (- (ypos A 0.5 0 +) (ypos fA1 0.5 0 +))
         (0 d fA1)))
  (fA3 (bar-bottom* preall fA2))
  (forall* (pretend (align* (ver-flip fA3) preall 0.5 0.5) preall))
  (forall forall*)

  (imath
    (with top2 (top i)
      (with top1 (top x)
        (with split (+ (* 0.75 top1) (* 0.25 top2))
          (clip i * * * split)))))
  (jmath
    (with top2 (top j)
      (with top1 (top x)
        (with split (+ (* 0.75 top1) (* 0.25 top2))
          (clip j * * * split)))))

  (mho (ver-flip (hor-flip omega)))
  (Backepsilon (ver-flip (hor-flip Epsilon)))
  (Backsigma (hor-flip Sigma))
  (b-mho (ver-flip (hor-flip b-omega)))
  (b-Mho (ver-flip (hor-flip b-Omega)))
  (b-backepsilon (ver-flip (hor-flip b-epsilon)))
  (b-Backepsilon (ver-flip (hor-flip b-Epsilon)))
  (b-Backsigma (hor-flip b-Sigma))

  (ldots (join (align . + 0 * 0)
               (align . + 1 *)
               (align . + 2 *)))
  (cdots (or (align ldots + * 0.5)
             (join (align . + 0 0.5 0)
                   (align . + 1 0.5)
                   (align . + 2 0.5))))
  (hdots (or (align ldots + * 1)
             (join (align . + 0 1)
                   (align . + 1 1)
                   (align . + 2 1))))
  (vdots (join (align . + * -0.25)
               (align . + * 0.5)
               (align . + * 1.25)))
  (udots (join (align . + 0 -0.25)
               (align . + 1 0.5)
               (align . + 2 1.25)))
  (ddots (join (align . + 2 -0.25)
               (align . + 1 0.5)
               (align . + 0 1.25)))

  (ssA (unserif A))
  (ssB (unserif B))
  (ssC (unserif C))
  (ssD (unserif D))
  (ssE (unserif E))
  (ssF (unserif F))
  (ssG (unserif G))
  (ssH (unserif H))
  (ssI (unserif I))
  (ssJ (unserif J))
  (ssK (unserif K))
  (ssL (unserif L))
  (ssM (unserif M))
  (ssN (unserif N))
  (ssO (unserif O))
  (ssP (unserif P))
  (ssQ (unserif Q))
  (ssR (unserif R))
  (ssS (unserif S))
  (ssT (unserif T))
  (ssU (unserif U))
  (ssV (unserif V))
  (ssW (unserif W))
  (ssX (unserif X))
  (ssY (unserif Y))
  (ssZ (unserif Z)))
